// function Car(brand,color,displacement) {
//   this.brand = brand,
//   this.color = color,
//   this.displacement = displacement
//   this.info = function () {
//     return '排量为' + this.displacement + '的' + this.color + this.brand
//   }
// }

// function Person(opt) {
//   Car.apply(this[opt.brand, opt.color, opt.displacement])
//   this.name = opt.name
//   this.age = opt.age
//   this.say = function () {
//     console.log(
//       '年龄为'+ this.age + '岁姓名为' + this.name + '买了一辆' + this.info()
//     );
//   }
// }

// var p = new Person({
//   brand: '奔驰',
//   color: '红色',
//   displacement: '3.0',
//   name: 'zhangsan',
//   age: '25'
// })
// p.say()


// var p = {
//   brand: '奔驰',
//   color: '红色',
//   displacement: '3.0',
//   name: 'zhangsan',
//   age: '25'
// }
// for (const key in p) {
//   if (Object.hasOwnProperty.call(p, key)) {
//     const element = p[key];
//     console.log(key + ':' +element);
//   }
// }


// hasOwnProperty 
// function Car() {
//   this.brand = 'benz',
//   this.color = 'red'
// }

// Car.prototype = {
//   lang : 2,
//   width: 1
// }

// let car = new Car()



// for(var key in car) {
//   console.log(key + ':' + car[key]);
// }

// console.log('-----------------');
// //hasOwnProperty 找对象自身的属性，排除自定义原型上的属性
// for(let key in car) {
//   if(car.hasOwnProperty(key)) {
//     console.log(key + ':' + car[key]);
//   }
// }

// instanceof 
// a instanceof b a对象的原型里到底有没有b的原型               
let a = [1,2,3]

console.log(Object.prototype.toString.call(a)); //用这种方法判断类型

//this
//函数内部的this
// function test(b) {
//   this.d = 3
//   var a = 1
//   function c() {}
// }

// test(123)


// function Person(name, age) {
//   this.name = name ,
//   this.age = age 
// }

// function Programmer(name, age, work) {
//   Person.apply(this,[name,age])
//   this.work = work
// }

// var li = new Programmer('小米',18,'coder')
// console.log(li);


// Js 中 typeof的返回值   object/boolean/Number,undefined/Function,null


undefined == null // true
undefined === null // false
isNaN('100') //false